package com.tools.pojo.data;


import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Date;

@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FsiOrderDTO {

    /**
     * 处方ID
     */
    @JsonProperty("rx_id")
    private String rxId;

    /**
     * 诊疗ID
     */
    @JsonProperty("mdtrt_id")
    private String mdtrtId;

    /**
     * 处方号
     */
    @JsonProperty("rxno")
    private String rxno;

    /**
     * 组号
     */
    @JsonProperty("grpno")
    private String grpno;

    /**
     * 长期医嘱标志
     */
    @JsonProperty("long_drord_flag")
    private String longDrordFlag;

    /**
     * 医保目录类型
     */
    @JsonProperty("hilist_type")
    private String hilistType;

    /**
     * 收费类别
     */
    @JsonProperty("chrg_type")
    private String chrgType;

    /**
     * 收费类别名称
     */
    @JsonProperty("chrg_name")
    private String chrgName;

    /**
     * 医嘱行为
     */
    @JsonProperty("drord_bhvr")
    private String drordBhvr;

    /**
     * 医保目录编码
     */
    @JsonProperty("hilist_code")
    private String hilistCode;

    /**
     * 医保目录名称
     */
    @JsonProperty("hilist_name")
    private String hilistName;

    /**
     * 医保目录剂型
     */
    @JsonProperty("hilist_dosform")
    private String hilistDosform;

    /**
     * 医保目录等级
     */
    @JsonProperty("hilist_lv")
    private String hilistLv;

    /**
     * 医保目录价格
     */
    @JsonProperty("hilist_pric")
    private BigDecimal hilistPric;

    /**
     * 一级医院项目价格
     */
    @JsonProperty("lv1_hosp_item_pric")
    private BigDecimal lv1HospItemPric;

    /**
     * 二级医院项目价格
     */
    @JsonProperty("lv2_hosp_item_pric")
    private BigDecimal lv2HospItemPric;

    /**
     * 三级医院项目价格
     */
    @JsonProperty("lv3_hosp_item_pric")
    private BigDecimal lv3HospItemPric;

    /**
     * 医保目录备注
     */
    @JsonProperty("hilist_memo")
    private String hilistMemo;

    /**
     * 医院目录编码
     */
    @JsonProperty("hosplist_code")
    private String hosplistCode;

    /**
     * 医院目录名称
     */
    @JsonProperty("hosplist_name")
    private String hosplistName;

    /**
     * 医院目录剂型
     */
    @JsonProperty("hosplist_dosform")
    private String hosplistDosform;

    /**
     * 数量
     */
    @JsonProperty("cnt")
    private Integer cnt;

    /**
     * 单价
     */
    @JsonProperty("pric")
    private BigDecimal pric;

    /**
     * 总金额
     */
    @JsonProperty("sumamt")
    private BigDecimal sumamt;

    /**
     * 自付金额
     */
    @JsonProperty("ownpay_amt")
    private BigDecimal ownpayAmt;

    /**
     * 自费金额
     */
    @JsonProperty("selfpay_amt")
    private BigDecimal selfpayAmt;

    /**
     * 规格
     */
    @JsonProperty("spec")
    private String spec;

    /**
     * 规格单位
     */
    @JsonProperty("spec_unt")
    private String specUnt;

    /**
     * 医嘱发生时间
     */
    @JsonProperty("drord_ocur_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date drordOcurTime;

    /**
     * 医嘱开始日期
     */
    @JsonProperty("drord_begn_date")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date drordBegnDate;

    /**
     * 医嘱停止日期
     */
    @JsonProperty("drord_stop_date")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date drordStopDate;

    /**
     * 开立科室编码
     */
    @JsonProperty("drord_dept_codg")
    private String drordDeptCodg;

    /**
     * 开立科室名称
     */
    @JsonProperty("drord_dept_name")
    private String drordDeptName;

    /**
     * 开立医生编码
     */
    @JsonProperty("drord_dr_codg")
    private String drordDrCodg;

    /**
     * 开立医生姓名
     */
    @JsonProperty("drord_dr_name")
    private String drordDrName;

    /**
     * 开立医生职称
     */
    @JsonProperty("drord_dr_profttl")
    private String drordDrProfttl;

    /**
     * 当前医嘱标志
     */
    @JsonProperty("curr_drord_flag")
    private String currDrordFlag;

    /**
     * 医嘱编码
     */
    @JsonProperty("drord_codg")
    private String drordCodg;

    /**
     * 医嘱名称
     */
    @JsonProperty("drord_name")
    private String drordName;

    /**
     * 药物使用频率
     */
    @JsonProperty("drug_used_frqu")
    private String drugUsedFrqu;

    /**
     * 药物使用单次剂量
     */
    @JsonProperty("drug_used_sdose")
    private String drugUsedSdose;

    /**
     * 药物使用剂量单位
     */
    @JsonProperty("medn_used_dosunt")
    private String mednUsedDosunt;

    /**
     * 疾病编码
     */
    @JsonProperty("dise_code")
    private String diseCode;

    /**
     * 疾病名称
     */
    @JsonProperty("dise_name")
    private String diseName;

    /**
     * 用药天数
     */
    @JsonProperty("medc_days")
    private String medcDays;

    /**
     * 医院审批标志
     */
    @JsonProperty("hosp_appr_flag")
    private String hospApprFlag;

    /**
     * 组合号
     */
    @JsonProperty("comb_no")
    private String combNo;

    /**
     * 组合名称
     */
    @JsonProperty("comb_name")
    private String combName;

    /**
     * 说明内容
     */
    @JsonProperty("exp_content")
    private String expContent;

    /**
     * 任务ID
     */
    @JsonProperty("task_id")
    private String taskId;

    // 计算属性
    /**
     * 是否为长期医嘱
     */
    public boolean isLongTermOrder() {
        return "1".equals(longDrordFlag);
    }

    /**
     * 是否为当前有效医嘱
     */
    public boolean isCurrentOrder() {
        return "1".equals(currDrordFlag);
    }

    /**
     * 是否为药物医嘱
     */
    public boolean isMedicationOrder() {
        return hilistType != null && hilistType.startsWith("10");
    }

    /**
     * 获取每日费用
     */
    public BigDecimal getDailyCost() {
        if (sumamt != null && medcDays != null && !medcDays.isEmpty()) {
            try {
                int days = Integer.parseInt(medcDays);
                if (days > 0) {
                    return sumamt.divide(BigDecimal.valueOf(days), 2, RoundingMode.HALF_UP);
                }
            } catch (NumberFormatException e) {
                // 忽略转换错误
            }
        }
        return BigDecimal.ZERO;
    }
}